package jers.util;

import java.io.InputStream;
import java.util.Properties;

/**
 * Classe que implementa o arquivo propriedades de configuracaos.
 * <p>
 * O arquivo de configuracao para esta classe deve ter o nome 
 * '{@code jers.properties}' e estar localizado no caminho  
 * {@code CLASSPATH/META-INF} da aplicacao. O arquivo deve seguir
 * as especificacao de {@link Properties}. Se o arquivo nao for 
 * encontrado a classe vai lancar uma {@link RuntimeException} 
 * para sinalizar a sua falta. 
 * </p>
 * 
 * @see {@link Properties}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
public final class SimpleConfigurator implements Configurator {

	/** As propriedades do sistema */
	private final Properties config;
	
	/**
	 * Construtor padrao.
	 * <br>
	 * Carrega o arquivo de propriedades ao iniciar.
	 * Caminho interno do framework padrao do arquivo: 
	 * {@code /META-INF/jers.properties}
	 */
	public SimpleConfigurator() {
		String file = "/META-INF/jers.properties";
		try {
			InputStream stream = this.getClass().getResourceAsStream(file);
			if (stream == null) {
				throw new IllegalArgumentException(Utility.concat(
						"Stream null for file: ", file));
			}
			config = new Properties();
			config.load(stream);
			
		} catch (Exception e) {
			String error = Utility.concat("Error on load the ", file, ": ", 
					e.getClass().getName(), " - ", e.getMessage());
			throw new RuntimeException(error, e);
		}
	}
	
	public String getProperty(String name) {
		return config.getProperty(name);
	}

	public void setProperty(String key, String value) {
		this.config.setProperty(key, value);
	}
	
}
